<?php

class SalesController extends AppController {

    var $name = 'Sales';
    var $uses = array('Sale', 'Item', 'Article');
    var $helpers = array('Html', 'Form', 'Javascript');

    function beforeFilter() {
        parent::beforeFilter();

        //si no es un usuario con nivel = 2 o 1 no lo dejo acceder a las siguientes funciones de este controlador
        if (in_array($this->action, array('index', 'add', 'edit', 'delete', 'view')) and $this->Auth->user('id') and !(in_array($this->Auth->user('level'), array(1,2)))) {
            $this->redirect(array('user' => false, 'controller' => 'articles', 'action' => 'inicio'));
        }
    }

    function index() {
        $this->Sale->recursive = 0;
        $this->paginate['order'] = array('Sale.sale_date' => 'DESC');
        $this->set('sales', $this->paginate());
    }

    function view($id = null, $datos = null) {
        if (!$id) {
            $this->Session->setFlash(__('Venta no válido', true));
            $this->redirect(array('action' => 'index'));
        }

        if ($this->Session->check('datos_mal_item')) {
            //si vienen datos
            $datos = $this->Session->read('datos_mal_item');
            $this->Session->delete('datos_mal_item');
            $this->data['Item'] = $datos;
        }
        $this->set('sale', $this->Sale->read(null, $id));
        //		$articles = $this->Item->Article->find('list');
        $articulos = $this->Article->find('all', array('fields' => array('Article.mark', 'Article.model', 'Article.id'), 'conditions' => array('Article.termination_date' => NULL), 'order'=>array('Article.mark'=>'ASC', 'Article.model'=>'ASC')));
        $articles = array();
        foreach ($articulos as $art) {
            $articles[$art['Article']['id']] = $art['Article']['mark'] . '-' . $art['Article']['model'];
        }
        $this->set(compact('articles'));
    }

    function add() {
        if (!empty($this->data)) {
            //ahora vamos a cambiar el formato de la fecha
            //me pongo a armar los campos de las fechas
            $array_datos = $this->data;
            if($array_datos['Sale']['sale_date'] != NULL){
                list($d, $m, $a) = explode("/", $array_datos['Sale']['sale_date']);
                $fecha_aux = $a . "-" . $m . "-" . $d;
                $array_datos['Sale']['sale_date'] = $fecha_aux;

                $fecha_actual = date('Y-m-d');
                if($array_datos['Sale']['sale_date'] <= $fecha_actual){

                    $this->Sale->create();
                    if ($this->Sale->save($array_datos)) {
                        $sale_id = $this->Sale->id;
        //				$this->Session->setFlash(__('La venta se ha guardado', true));
                        $this->redirect(array('action' => 'view', $sale_id));
                    } else {
                        $this->Session->setFlash(__('La venta no se pudo guardar. Por favor, inténtelo de nuevo.', true));
                    }
                }else{
                    $this->Session->setFlash(__('La venta no se pudo guardar. Verifique que la Fecha de venta sea menor que la fecha actual.', true));
                }
            }else{
                $this->Session->setFlash(__('Debe completar los datos.', true));
            }
        }
    }

    function edit($id = null) {        
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Venta no válido', true));
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            //ahora vamos a cambiar el formato de la fecha
            //me pongo a armar los campos de las fechas
            $array_datos = $this->data;
            if(!empty($array_datos['Sale']['sale_date'])){
                list($d, $m, $a) = explode("/", $array_datos['Sale']['sale_date']);
                $fecha_aux = $a . "-" . $m . "-" . $d;
                $array_datos['Sale']['sale_date'] = $fecha_aux;

                $fecha_actual = date('Y-m-d');
                if($fecha_aux <= $fecha_actual){
                    if ($this->Sale->save($array_datos)) {
        //				$this->Session->setFlash(__('La venta se ha guardado', true));
                        $this->redirect(array('action' => 'index'));
                    }
                }else {
                    $this->Session->setFlash(__('La venta no se pudo guardar. Verifique que la Fecha de Venta sea menor que la fecha actual.', true));
                }
            }else{
                $this->Session->setFlash(__('La venta no se pudo guardar. Verifique que la Fecha de Venta sea menor que la fecha actual.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->Sale->read(null, $id);
            //transformo la fecha para que se muestre con el formato dd/mm/yyyy
            $this->data['Sale']['sale_date'] = date('d/m/Y', strtotime($this->data['Sale']['sale_date']));
        }
    }

    function delete($id = null) {
        $this->Sale->query('SET AUTOCOMMIT = 0;');
        $this->Sale->query('START TRANSACTION;');
        $bandera = true; //la uso para ver si algo salio mal

        if (!$id) {
            $this->Session->setFlash(__('No válida de identificación para la venta', true));
            $this->redirect(array('action' => 'index'));
        }
        //Borrar items relacionados items
        $items = $this->Item->find('all', array('conditions' => array('Item.sale_id' => $id)));
        
        foreach($items as $item){
            $sql  = "UPDATE articles SET amount_available = amount_available + " .$item['Item']['sale_amount']. " WHERE id = " .$item['Item']['article_id']. "";
            if($this->Item->query($sql)){
                if($this->Item->delete($item['Item']['id'])){
                $bandera=true;
                }
                else{
                    $bandera=false;
                }
            }else{
                $bandera=false;
            }
        }
        //FinBorrar items relacionados items

        if($this->Sale->delete($id)){
            $bandera=true;
        }else{
            $bandera=false;
        }
        
        if ($bandera) {
            $this->Sale->query('COMMIT;');
            $this->Sale->query('SET AUTOCOMMIT = 1;');
//                $this->Session->setFlash(__('Venta eliminada', true));
            $this->redirect(array('action' => 'index'));
        } else {//si hubo algun error hago un ROLLBACK deshaciendo todas estas consultas
            $this->Sale->query('ROLLBACK;');
            $this->Sale->query('SET AUTOCOMMIT = 1;');
            $this->Session->setFlash(__('venta no eliminada', true));
        }

        $this->redirect(array('action' => 'index'));
    }

}
